const sharp = require('sharp');
const fs = require('fs');
const path = require('path');

// 图片处理配置
const config = {
  targetWidth: 750,  // 目标宽度
  quality: 80,      // JPEG质量
  maxSize: 200      // 最大文件大小(KB)
};

// 处理单个图片
async function processImage(inputPath) {
  try {
    const filename = path.basename(inputPath);
    const ext = path.extname(filename);
    const name = path.basename(filename, ext);
    const outputPath = path.join(path.dirname(inputPath), `${name}.png`);

    // 读取图片信息
    const imageInfo = await sharp(inputPath).metadata();
    
    // 计算新的高度，保持宽高比
    const targetHeight = Math.round((config.targetWidth * imageInfo.height) / imageInfo.width);

    // 处理图片
    await sharp(inputPath)
      .resize(config.targetWidth, targetHeight)
      .png({ quality: config.quality })
      .toFile(outputPath);

    console.log(`处理完成: ${filename} -> ${path.basename(outputPath)}`);

    // 如果是avif格式，删除原文件
    if (ext.toLowerCase() === '.avif') {
      fs.unlinkSync(inputPath);
      console.log(`删除原文件: ${filename}`);
    }
  } catch (error) {
    console.error(`处理图片失败 ${inputPath}:`, error);
  }
}

// 处理文件夹中的所有图片
async function processDirectory(dirPath) {
  try {
    const files = fs.readdirSync(dirPath);
    
    for (const file of files) {
      const filePath = path.join(dirPath, file);
      const ext = path.extname(file).toLowerCase();
      
      // 只处理avif格式的图片
      if (ext === '.avif') {
        await processImage(filePath);
      }
    }

    console.log('所有图片处理完成！');
  } catch (error) {
    console.error('处理目录失败:', error);
  }
}

// 主函数
async function main() {
  const mealsDir = path.join(__dirname, '../miniprogram/images/meals');
  await processDirectory(mealsDir);
}

// 运行程序
main().catch(console.error); 